Modern data centers often have a multi-tier configuration wherein a front end server accesses one or more layers of middle-tier and back-tier servers for various services. One example of a back-end server is a storage array. Storage arrays form the backbone of modern data centers by providing consolidated data access to multiple applications simultaneously. Increasingly, organizations are moving towards consolidated storage, either using block-based access over a Storage Area Network (SAN) or file-based access over Network-Attached Storage (NAS) systems. A Storage Area Network is a network whose primary purpose is the transfer of data between computer systems and storage elements. Easy access from anywhere at anytime, ease of backup, flexibility in allocation and centralized administration are some of the advantages of storage arrays.
When multiple clients share a storage array, access to the storage arrays by the different clients is typically managed. Most existing storage array management solutions provide bandwidth allocation among multiple clients running on a single host. In that case, one centralized scheduler has complete control over requests going to the storage arrays. Other approaches try to control the queue length at the storage array to provide tight latency control, but they are also centralized. In a distributed case, throttling based approaches such as Hewlett-Packard's “Triage” system have been proposed. Such host-based throttling solutions use centralized monitoring and work at a very coarse granularity which may cause substantial loss in utilization. Running them at finer granularity may cause a prohibitive increase in communication costs. In general, strict throttling solutions lead to efficiency losses and non work-conserving behavior.